]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
popupMenu: Use Clutter.Sprite for pointing focus identification
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 26 May 2025 15:25:16 +0000 (17:25 +0200)
committerMarge Bot <marge-bot@gnome.org>
Thu, 28 Aug 2025 20:15:40 +0000 (20:15 +0000)
Move away from devices and sequences for this.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3726>

js/ui/popupMenu.js

index ced8a5ae82c10fa1d1cb277d28c7874e1db47d21..bd0d51f93efc42c605443e73dcc5601448f21cab 100644 (file)
@@ -453,40 +453,45 @@ export const Switch = GObject.registerClass({
 
         this._dragging = true;
         [this._initialGrabX] = event.get_coords();
-        let device = event.get_device();
-        let sequence = event.get_event_sequence();
 
         this._grab = global.stage.grab(this);
 
-        this._grabbedDevice = device;
-        this._grabbedSequence = sequence;
+        const backend = global.stage.get_context().get_backend();
+        const sprite = backend.get_sprite(global.stage, event);
+        this._sprite = sprite;
 
         return Clutter.EVENT_STOP;
     }
 
-    vfunc_motion_event() {
-        if (this._dragging && !this._grabbedSequence)
+    vfunc_motion_event(event) {
+        const backend = this.get_context().get_backend();
+        const sprite = backend.get_sprite(global.stage, event);
+
+        if (this._dragging && this._sprite === sprite)
             return this._motionEvent(this, Clutter.get_current_event());
 
         return Clutter.EVENT_PROPAGATE;
     }
 
-    vfunc_button_release_event() {
-        if (this._dragging && !this._grabbedSequence)
+    vfunc_button_release_event(event) {
+        const backend = this.get_context().get_backend();
+        const sprite = backend.get_sprite(global.stage, event);
+
+        if (this._dragging && this._sprite === sprite)
             return this._endDragging();
 
         return Clutter.EVENT_PROPAGATE;
     }
 
     _touchDragging(actor, event) {
-        let sequence = event.get_event_sequence();
+        const backend = actor.get_context().get_backend();
+        const sprite = backend.get_sprite(global.stage, event);
 
         if (!this._dragging &&
             event.type() === Clutter.EventType.TOUCH_BEGIN) {
             this.startDragging(event);
             return Clutter.EVENT_STOP;
-        } else if (this._grabbedSequence &&
-                   sequence.get_slot() === this._grabbedSequence.get_slot()) {
+        } else if (this._sprite === sprite) {
             if (event.type() === Clutter.EventType.TOUCH_UPDATE)
                 return this._motionEvent(this, event);
             else if (event.type() === Clutter.EventType.TOUCH_END)
@@ -511,8 +516,7 @@ export const Switch = GObject.registerClass({
             this.toggle();
 
         this._dragged = false;
-        this._grabbedSequence = null;
-        this._grabbedDevice = null;
+        this._sprite = null;
         this._dragging = false;
 
         return Clutter.EVENT_STOP;